/* 常量路由 */
import { constantRoutes } from '@/router/routes/constantRoutes'
/* 异步路由 */
import { asyncRoutes } from '@/router/routes/asyncRoutes'

const actions = {
  /*
  * addRoutesAction的作用：
  *   state参数:当前store中的state数据
  *   asyncRoutesArray参数:用户本身的页面级别路由数组
  *   接收用户页面级别路由权限数组(asyncRoutesArray)，将项目中的所有异步路由(asyncRoutes)与用户页面级别路由权限数组(asyncRoutesArray)进行筛选
  *   生成最终路由(resultRoutes)，然后提交mutation，将常量路由(constantRoutes )和筛选后的最终路由(resultRoutes)进行合并
  *  */
  async addRoutesAction(context, asyncRoutesArray) {
    // 将项目中的所有异步路由(asyncRoutes)与用户本身页面级别路由权限数组(asyncRoutesArray)进行筛选，生成最终路由(resultRoutes)
    const resultRoutes = asyncRoutes.filter(item => asyncRoutesArray.includes(item.children[0].name))
    // 提交mutation
    context.commit('addRoutesMutation', resultRoutes)
    // 返回最终路由
    return resultRoutes
  },
  /* addPointsAction的作用：处理按钮级别的权限 */
  addPointsAction(context, points) {
    context.commit('addPointsMutation', points)
  }
}
const mutations = {
  addRoutesMutation(state, resultRoutes) {
    /* 合并常量路由(constantRoutes,)与筛选后的最终路由(resultRoutes) */
    state.menu = [...constantRoutes, ...resultRoutes]
  },
  addPointsMutation(state, points) {
    /* 赋值按钮级别的数组 */
    state.points = points
  }
}
const state = {
  /* 页面权限 */
  menu: constantRoutes,
  /* 按钮权限 */
  points: []
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}

